<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="Content-Style-Type" content="text/css">
  <script src='../bbs.js'></script>

  <!-- Global site tag (gtag.js) - Google Analytics -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=UA-120820034-1"></script>

  <link href="../bbs.css" type="text/css" rel="stylesheet">
  <link rel="shortcut icon" href="/favicon.ico">
  <title>VSライクなhtml終タグ自動補完 | サクラエディタ過去ログ</title>
</head>
<body>
<ul class="side">
        <a href="./" class="toindex">◀マクロトップへ</a>
        <li><div class="list-title">
    <span class="no">341</span>
    <a class="thread-title" href="341.html#341">VSライクなhtml終タグ自動補完</a></div>
    <ul><li><div class="list-title">
    <span class="no">342</span>
    <a class="thread-title" href="341.html#342">texバージョンもあります</a></div>
    </li></ul></li>
    </ul><ul class="main"><li><section><h1 id=341>
    <span class="no">[341]</span>
    <a class="thread-title" href="#341">VSライクなhtml終タグ自動補完</a>
    <span class="author">peak</span>
    <time datetime="2006-12-23T09:14:36">2006年12月23日 09:14</time></h1>
    <div class="body">Wikiへの投稿方法が分からないのでこちらに<br>gis_dur 氏のマクロにインスパイアされたものです。<br>////////////////////////////////////////////////////////////////////////////////<br>// html, xml 入力支援<br>// &lt;...&gt;の直後に&lt;/...&gt;を自動で補完します。<br>//<br>// インストール方法<br>// キー SHIFT + . にこのマクロを割り当ててください。<br><br><br>////////////////////////////////////////////////////////////////////////////////<br>// エントリーポイント<br>Entry();<br><br><br>function Entry()<br>{<br>&#9;// SHIFT + . で呼び出されるので、とりあえず &gt; を出力する<br>&#9;Editor.Char(0x3e); // 0x3e = '&gt;'<br><br>&#9;var strFileName = Editor.GetFileName();<br>&#9;if(/\.(htm|html|shtml)$/.test(strFileName)){<br>&#9;&#9;ComplementTag(true);<br>&#9;}<br>&#9;else if(/\.(xml|xhtml)$/.test(strFileName)){<br>&#9;&#9;ComplementTag(false);<br>&#9;}<br>}<br><br><br>function ComplementTag(isHTML)<br>{<br>&#9;var strLine = GetCurLineUntilCursor();<br>&#9;var astrMatched = strLine.match(/&lt;([^&lt;&gt;"']|"[^"]*?"|'[^']*?')+&gt;$/); //'<br>&#9;if(astrMatched == null) return false;<br>&#9;var strTag = astrMatched[0];<br><br>&#9;// 終タグを必要としないタグなら何もしない<br>&#9;if(/--&gt;$|\/&gt;$|\?&gt;$/.test(strTag)) return;<br>&#9;if(strTag.search(/^&lt;\s*(\w+)/) &lt; 0) return;<br><br>&#9;// タグ名を抽出<br>&#9;strTag = RegExp.$1;<br><br>&#9;if(isHTML){<br>&#9;&#9;// HTMLの場合は、タグの種類によっては終タグがいらない<br>&#9;&#9;if("|area|base|basefont|bgsound|br|col|embed|frame|hr|img|input|isindex|keygen|link|meta|nextid|param|spacer|wbr|"<br>&#9;&#9;&#9;.indexOf("|" + strTag + "|") &gt;= 0)<br>&#9;&#9;{<br>&#9;&#9;&#9;return;<br>&#9;&#9;}<br>&#9;}<br><br>&#9;// 終タグを作って挿入<br>&#9;strTag = "&lt;/" + strTag + "&gt;";<br><br>&#9;Editor.InsText(strTag);<br>&#9;for(var i = 0; i &lt; strTag.length; ++i){<br>&#9;&#9;Editor.Left();<br>&#9;}<br><br>&#9;return true;<br>}<br><br><br>function GetCurLineUntilCursor()<br>{<br>&#9;// カーソル位置取得<br>&#9;var xCursor = parseInt(Editor.ExpandParameter('$x'));<br>&#9;var yCursor = parseInt(Editor.ExpandParameter('$y'));<br><br>&#9;// カーソル行全体を取得<br>&#9;var str = Editor.GetLineStr(yCursor);<br><br>&#9;// xCursor はマルチバイトコードでの値なのでユニコード用に補正<br>&#9;--xCursor; // １起算だったものを０起算に直す<br>&#9;for (var x = 0; x &lt; xCursor; ++x){<br>&#9;&#9;if(IsWide(str.charCodeAt(x))) --xCursor;<br>&#9;}<br><br>&#9;return str.substring(0, xCursor);<br>}<br><br><br>////////////////////////////////////////////////////////////////////////////////<br>// ２バイト文字判定<br>function IsWide(charCode)<br>{<br>&#9;return  0x80 &lt;= charCode &amp;&amp; (charCode &lt;= 0xff60 || 0xffa0 &lt;= charCode);<br>}<br></div></section>
    <ul><li><section><h1 id=342>
    <span class="no">[342]</span>
    <a class="thread-title" href="#342">texバージョンもあります</a>
    <span class="author">peak</span>
    <time datetime="2006-12-23T09:21:42">2006年12月23日 09:21</time></h1>
    <div class="body">////////////////////////////////////////////////////////////////////////////////<br>// tex 入力支援<br>// \begin{...}の直後に\end{...}を自動で補完します。<br>//<br>// インストール方法<br>// キー SHIFT + ] にこのマクロを割り当ててください。<br><br><br>////////////////////////////////////////////////////////////////////////////////<br>// エントリーポイント<br>Entry();<br><br><br>function Entry()<br>{<br>&#9;// SHIFT + ] で呼び出されるので、とりあえず } を出力する<br>&#9;Editor.Char(0x7d); // 0x7d = '}'<br><br>&#9;var strFileName = Editor.GetFileName();<br>&#9;var ixExt = strFileName.lastIndexOf('.');<br>&#9;if(ixExt &gt;= 0){<br>&#9;&#9;var strExt = strFileName.substr(ixExt).toLowerCase();<br>&#9;&#9;if(strExt == '.tex'){<br>&#9;&#9;&#9;ComplementTag();<br>&#9;&#9;}<br>&#9;}<br>}<br><br><br>function ComplementTag()<br>{<br>&#9;var strLine = GetCurLineUntilCursor();<br>&#9;var astrMatched = strLine.match(/\\begin\{[^{}]+?\}$/);<br>&#9;if(astrMatched == null){<br>&#9;&#9;return false;<br>&#9;}<br>&#9;var strEndTag = astrMatched[0].replace(/^\\begin/, "\\end");<br><br>&#9;Editor.InsText(strEndTag);<br>&#9;for(var i = 0; i &lt; strEndTag.length; ++i){<br>&#9;&#9;Editor.Left();<br>&#9;}<br><br>&#9;return true;<br>}<br><br><br>function GetCurLineUntilCursor()<br>{<br>&#9;// カーソル位置取得<br>&#9;var xCursor = parseInt(Editor.ExpandParameter('$x'));<br>&#9;var yCursor = parseInt(Editor.ExpandParameter('$y'));<br><br>&#9;// カーソル行全体を取得<br>&#9;var str = Editor.GetLineStr(yCursor);<br><br>&#9;// xCursor はマルチバイトコードでの値なのでユニコード用に補正<br>&#9;--xCursor; // １起算だったものを０起算に直す<br>&#9;for (var x = 0; x &lt; xCursor; ++x){<br>&#9;&#9;if(IsWide(str.charCodeAt(x))) --xCursor;<br>&#9;}<br><br>&#9;return str.substring(0, xCursor);<br>}<br><br><br>////////////////////////////////////////////////////////////////////////////////<br>// ２バイト文字判定<br>function IsWide(charCode)<br>{<br>&#9;return  0x80 &lt;= charCode &amp;&amp; (charCode &lt;= 0xff60 || 0xffa0 &lt;= charCode);<br>}<br></div></section>
    </li></ul></li></ul></body></html>